package com.ssy.lingxi.member.merchant.service.mobile;

import com.ssy.lingxi.common.model.dto.UserLoginCacheDTO;
import com.ssy.lingxi.common.model.vo.PageVO;
import com.ssy.lingxi.common.response.PageData;
import com.ssy.lingxi.common.response.Wrapper;
import com.ssy.lingxi.member.merchant.entity.MemberRelationDO;
import com.ssy.lingxi.member.merchant.model.vo.basic.request.MobileUserPageVO;
import com.ssy.lingxi.member.merchant.model.vo.basic.request.UpdateRegisterDetailVO;
import com.ssy.lingxi.member.merchant.model.vo.basic.request.UpperMemberIdRoleIdVO;
import com.ssy.lingxi.member.merchant.model.vo.basic.response.RegisterDetailGroupVO;
import com.ssy.lingxi.member.merchant.model.vo.basic.response.UserQueryVO;
import com.ssy.lingxi.member.merchant.model.vo.info.response.*;
import com.ssy.lingxi.member.merchant.model.vo.lifecycle.response.MemberCreditComplaintPageQueryVO;
import com.ssy.lingxi.member.merchant.model.vo.maintenance.request.MemberDetailCreditHistoryPageVO;
import com.ssy.lingxi.member.merchant.model.vo.maintenance.response.*;
import com.ssy.lingxi.member.merchant.model.vo.mobile.request.*;
import com.ssy.lingxi.member.merchant.model.vo.mobile.response.MobileInfoApplyButtonVO;
import com.ssy.lingxi.member.merchant.model.vo.mobile.response.MobileUpdateDepositDetailQueryVO;
import com.ssy.lingxi.member.merchant.model.vo.mobile.response.MobileValidateHistoryVO;
import com.ssy.lingxi.member.merchant.model.vo.validate.request.ValidateIdPageVO;
import com.ssy.lingxi.member.merchant.model.vo.validate.request.ValidateIdVO;
import com.ssy.lingxi.member.merchant.model.vo.validate.response.ValidateStepVO;
import org.springframework.http.HttpHeaders;
import org.springframework.web.bind.annotation.RequestHeader;

import javax.validation.Valid;
import java.util.List;

/**
 * App - 会员信息管理查询服务接口
 * @author 万宁
 * @version 2.0.0
 * @date 2020-12-08
 */
public interface IMobileMemberInfoService {
    /**
     * “会员中心“ - 根据前端商城类型、属性，查询会员关系
     * @param loginUser 登录用户
     * @param shopType 商城类型
     * @param shopProperty 商城属性
     * @param upperMemberId 上级会员Id
     * @param upperRoleId 上级角色Id
     * @return 查询结果
     */
    Wrapper<MemberRelationDO> findMobileMemberRelation(UserLoginCacheDTO loginUser, Integer shopType, Integer shopProperty, Long upperMemberId, Long upperRoleId);

    /**
     * 查找登录会员的logo
     * @param loginUser 登录用户
     * @return 会员Logo
     */
    String findMemberLogo(UserLoginCacheDTO loginUser);

    /**
     * “我的-卡包” - 分页查询归属会员列表
     * @param headers Http头部信息
     * @param pageVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<MobileInfoLevelRightQueryVO>> pageUpperMemberLevelRights(HttpHeaders headers, PageVO pageVO);

    /**
     * “会员中心” - 查询当前会员的积分、权益信息
     * @param headers Http头部信息
     * @param shopVO 接口参数
     * @return 查询结果
     */
    Wrapper<MobileInfoLevelRightVO> getMemberDetailLevelRight(HttpHeaders headers, MobileShopVO shopVO);

    /**
     * “会员中心” - 分页查询会员权益获取记录
     * @param headers Http头部信息
     * @param pageVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<MemberDetailRightHistoryVO>> pageMemberDetailRightHistory(HttpHeaders headers, MobileShopPageVO pageVO);

    /**
     * “会员中心” - 分页查询会员权益使用记录
     * @param headers Http头部信息
     * @param pageVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<MemberDetailRightSpendHistoryVO>> pageMemberDetailRightSpendHistory(HttpHeaders headers, MobileShopPageVO pageVO);

    /**
     * “会员中心” - 分页查询等级分获取记录
     * @param headers Http头部信息
     * @param pageVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<MemberDetailLevelHistoryVO>> pageMemberLevelDetailHistory(HttpHeaders headers, MobileShopPageVO pageVO);


    /**
     * 分页查询归属会员列表
     * @param headers Http头部信息
     * @param pageVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<UpperMemberInfoVO>> pageUpperMembers(HttpHeaders headers, PageVO pageVO);

    /**
     * 会员详情 - 会员基本信息
     * @param headers Http头部信息
     * @param shopVO 接口参数
     * @return 查询结果
     */
    Wrapper<MobileInfoBasicDetailVO> getMemberBasicDetail(HttpHeaders headers, MobileShopVO shopVO);



    /**
     * 会员详情 - 会员诚信信息 - 会员基本信用信息
     * @param headers Http头部信息
     * @param idVO 接口参数
     * @return 查询结果
     */
    Wrapper<MemberDetailCreditVO> getMemberDetailCredit(HttpHeaders headers, ValidateIdVO idVO);

    /**
     * 会员详情 - 会员信用信息 - 交易评价汇总
     * @param headers Http头部信息
     * @param idVO 接口参数
     * @return 查询结果
     */
    Wrapper<MobileCommentSummaryVO> getMemberDetailCreditTradeCommentSummary(HttpHeaders headers, ValidateIdVO idVO);

    /**
     * 会员详情 - 会员信用 - 分页查询交易评论历史记录
     * @param headers Http头部信息
     * @param pageVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<MemberDetailCreditTradeHistoryVO>> pageMemberDetailCreditTradeCommentHistory(HttpHeaders headers, MemberDetailCreditHistoryPageVO pageVO);

    /**
     * 会员详情 - 会员信用信息 - 售后评价汇总
     * @param headers Http头部信息
     * @param idVO 接口参数
     * @return 查询结果
     */
    Wrapper<MobileCommentSummaryVO> getMemberDetailCreditAfterSaleCommentSummary(HttpHeaders headers, ValidateIdVO idVO);

    /**
     * 会员详情 - 会员信用 - 分页查询售后评论历史记录
     * @param headers Http头部信息
     * @param pageVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<MemberDetailCreditAfterSaleHistoryVO>> pageMemberDetailCreditAfterSaleCommentHistory(HttpHeaders headers, MemberDetailCreditHistoryPageVO pageVO);

    /**
     * 会员详情 - 会员信用 - 投诉汇总
     * @param headers Http头部信息
     * @param idVO 接口参数
     * @return 查询结果
     */
    Wrapper<MemberDetailCreditComplainSummaryVO> getMemberDetailCreditComplainSummary(HttpHeaders headers, ValidateIdVO idVO);

    /**
     * 会员详情 - 会员信用 - 分页查询投诉历史记录
     * @param headers Http头部信息
     * @param pageVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<MemberCreditComplaintPageQueryVO>> pageMemberDetailCreditComplainHistory(HttpHeaders headers, ValidateIdPageVO pageVO);

    /**
     * 查询审批流程
     * @param headers Http头部信息
     * @param idVO 接口参数
     * @return 查询结果
     */
    Wrapper<ValidateStepVO> getMobileOuterValidateSteps(HttpHeaders headers, ValidateIdVO idVO);

    /**
     * 分页查询审核历史记录
     * @param headers Http头部信息
     * @param pageVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<MobileValidateHistoryVO>> pageMobileMemberOuterValidateHistory(HttpHeaders headers, ValidateIdPageVO pageVO);

    /**
     * 获取“修改会员信息”页面，会员注册资料信息
     * @param headers Http头部信息
     * @return 查询结果
     */
    Wrapper<List<RegisterDetailGroupVO>> getMemberRegisterDetail(HttpHeaders headers);

    /**
     * 修改会员信息
     * @param headers Http头部信息
     * @param detailVO 接口参数
     * @return 修改结果
     */
    Wrapper<Void> updateMemberRegisterDetail(HttpHeaders headers, UpdateRegisterDetailVO detailVO);

    /**
     * 分页查询会员下属用户
     * @param headers Http头部新
     * @param pageVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<UserQueryVO>> pageUsers(HttpHeaders headers, MobileUserPageVO pageVO);

    /**
     * “店铺会员”页面，查询“申请会员”按钮状态和文本
     * @param headers Http头部信息
     * @param upperMemberVO 接口参数
     * @return 查询结果
     */
    Wrapper<MobileInfoApplyButtonVO> getMobileApplyCondition(HttpHeaders headers, UpperMemberIdRoleIdVO upperMemberVO);

    /**
     * “店铺会员”页面，查询“入会享特权”的权益列表
     * @param headers Http头部信息
     * @param upperMemberVO 接口参数
     * @return 查询结果
     */
    Wrapper<List<MemberDetailRightConfigVO>> getUpperMemberRights(HttpHeaders headers, UpperMemberIdRoleIdVO upperMemberVO);

    /**
     * “店铺会员”页面，申请成为会员时，查询需要填写的入库资料
     * @param headers Http头部信息
     * @param upperMemberVO 接口参数
     * @return 查询结果
     */
    Wrapper<List<RegisterDetailGroupVO>> findMobileApplyDepositDetails(HttpHeaders headers, UpperMemberIdRoleIdVO upperMemberVO);

    /**
     * “店铺会员”页面，修改入库资料时，查询已有的入库资料信息
     * @param headers Http头部信息
     * @param upperMemberVO 接口参数
     * @return 修改结果
     */
    Wrapper<MobileUpdateDepositDetailQueryVO> getMemberDepositDetail(@RequestHeader HttpHeaders headers, @Valid UpperMemberIdRoleIdVO upperMemberVO);

    /**
     * “店铺会员”页面，当审核不通过时，修改入库资料
     * @param headers Http头部信息
     * @param depositDetailVO 接口参数
     * @return 修改结果
     */
    Wrapper<Void> updateDepositDetail(HttpHeaders headers, MobileUpdateDepositDetailVO depositDetailVO);

    /**
     * “申请会员” - 提交
     * @param headers Http头部信息
     * @param subVO 接口参数
     * @return 申请结果
     */
    Wrapper<Void> applyToBeSubMember(HttpHeaders headers, MobileApplyForSubVO subVO);

    /**
     * “店铺会员” - 查询当前会员的等级、权益信息
     * @param headers Http头部信息
     * @param upperMemberIdRoleIdVO 接口参数
     * @return 查询结果
     */
    Wrapper<MobileInfoLevelRightVO> getShopMemberDetailLevelRight(HttpHeaders headers, UpperMemberIdRoleIdVO upperMemberIdRoleIdVO);

    /**
     * “店铺会员”  - 分页查询会员权益获取记录
     * @param headers Http头部信息
     * @param pageVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<MemberDetailRightHistoryVO>> pageShopMemberDetailRightHistory(HttpHeaders headers, MobileUpperPageVO pageVO);

    /**
     * “店铺会员”  - 分页查询会员权益使用记录
     * @param headers Http头部信息
     * @param pageVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<MemberDetailRightSpendHistoryVO>> pageShopMemberDetailRightSpendHistory(HttpHeaders headers, MobileUpperPageVO pageVO);

    /**
     * “店铺会员”  - 分页查询活跃分获取记录
     * @param headers Http头部信息
     * @param pageVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<MemberDetailLevelHistoryVO>> pageShopMemberLevelDetailHistory(HttpHeaders headers, MobileUpperPageVO pageVO);
}
